home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -in_the_mag- / emulation / -otherstuff- / amiganpi / src_blitz / interface.asc < prev    next >
Text File  |  1998-01-05  |  26KB  |  958 lines

  1. ; Interface code for AmigaNPI
  2. ; includes handling of CLI arguments, preference file
  3. ; or graphical MUI interface
  4.  
  5. gui_on.l=False            ; assume started from CLI
  6.  
  7. pref_name$="AmigaNPI.prefs"
  8.  
  9. If Exists(pref_name$)
  10.  ;do nothing, preference file is in default directory
  11. Else
  12.  pref_name$="env:AmigaNPI.prefs"
  13. EndIf
  14.  
  15. If Exists(pref_name$)     ; read preferences file (if it exists)
  16.  If ReadFile(0,pref_name$)
  17.   FileInput 0
  18.   abort=False
  19.   Repeat
  20.    a$=Edit$(80)
  21.    Select a$
  22.     Case "Device"
  23.      device$=Edit$(80)
  24.     Case "Device_Unit"
  25.      device_unit=Val(Edit$(80))
  26.     Case "Device_Buffer"
  27.      device_buffer=Val(Edit$(80))
  28.     Case "Device_Speed"
  29.      device_speed=Val(Edit$(80))
  30.     Case "Device_Flags"
  31.      device_flags=Val(Edit$(80))
  32.     Case "Desktop_Wait"
  33.      desk_wait=Val(Edit$(80))
  34.     Case "Newton_Wait"
  35.      newt_wait=Val(Edit$(80))
  36.     Default
  37.      ; read invalid line
  38.      abort=True
  39.      If NumPars>0
  40.       NPrint "ERROR - Invalid preferences file"
  41.       NPrint "        May be obsolete version"
  42.      Else
  43.       dummy.l=Request("AmigaNPI ERROR","Invalid preferences file"+Chr$(10)+"May be obsolete version","Ok")
  44.      EndIf
  45.    End Select
  46.   Until Eof(0) OR (abort=True)
  47.   DefaultInput
  48.   CloseFile 0
  49.  EndIf
  50. EndIf
  51.  
  52. If NumPars>0
  53.  ; read CLI prefs, assume started from CLI
  54.  ; actually, there is a specific command called `FromCLI' for this purpose...
  55.  NPrint "AmigaNPI 1.4"
  56.  NPrint ""
  57.  If Par$(1)="?"
  58.   ; user is asking for help
  59.   NPrint "AmigaNPI PackageFile [device [device_unit [bps [flags [buffer size]]]]]"
  60.   NPrint ""
  61.   NPrint "Default for optional parameters is "
  62.   NPrint "      devs:serial.device 0 38400 148 64"
  63.   NPrint "Unless `AmigaNPI.prefs' exists in the current directory or ENV:"
  64.   NPrint ""
  65.   NPrint "Flags - 128 - Disable Xon/Xoff"
  66.   NPrint "      -  64 - Enable EOF checking"
  67.   NPrint "      -  32 - Enable shared mode"
  68.   NPrint "      -  16 - Enable high speed mode"
  69.   NPrint "      -   8 - Break command waits for buffer empty"
  70.   NPrint "      -   4 - use RTS/CTS"
  71.   NPrint "      -   2 - Select odd parity (otherwise use even)"
  72.   NPrint "      -   1 - Enable parity checking"
  73.   NPrint ""
  74.   NPrint "`AmigaNPI ?' results in this message being output"
  75.   NPrint "`AmigaNPI' opens a graphical interface (MUI 3.8)"
  76.   NPrint ""
  77.   NPrint "Amiga conversions and modification by David Fong (1997)"
  78.   NPrint "Written by Filip R. Zawadiak (1997)"
  79.   NPrint ""
  80.   NPrint "This program is free software; you can redistribute it"
  81.   NPrint "and/or modify it according to the terms of the GNU General"
  82.   NPrint "Public Licence as published by the Free Software Foundation"
  83.   NPrint ""
  84.   NPrint "This program is distributed in the hope that it will be"
  85.   NPrint "useful but WITHOUT ANY WARRANTY; without even the implied"
  86.   NPrint "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the"
  87.   NPrint "GNU General Public Licence for more details."
  88.   NPrint ""
  89.   NPrint "Note that this program can only load files with"
  90.   NPrint "the .pkg extension.  It cannot upload .hqx files"
  91.   NPrint "or Stuffit (.sit) files"
  92.   End ; don't continue
  93.  EndIf
  94.  package$=Par$(1)
  95.  If NumPars>1
  96.   device$=Par$(2)
  97.   If NumPars>2
  98.    device_unit=Val(Par$(3))
  99.    If NumPars>3
  100.     device_speed=Val(Par$(4))
  101.     If NumPars>4
  102.      device_flags=Val(Par$(5))
  103.      If NumPars>5
  104.       device_buffer=Val(Par$(6))
  105.      EndIf
  106.     EndIf
  107.    EndIf
  108.   EndIf
  109.  EndIf
  110.  gui_on=False
  111.  Goto skip_mui    ;skip all the MUI setup!
  112. Else
  113.  ; assume started from WB
  114.  ; open up a MUI interface in any case
  115.  gui_on=True
  116. EndIf
  117.  
  118. ; now set up the MUI interface
  119. DEFTYPE.l
  120.  
  121. CNIF #cli_only=0
  122.  
  123. #ASL_TitleText=$80080001
  124. #ASL_InitialFile=$80080008
  125. #ASL_InitialDrawer=$80080009
  126. #ASL_InitialPattern=$8008000a
  127. #ASL_flags1=$80080014
  128. #ASL_AcceptPattern=$8008003e
  129. #ASL_TitleText=$80080001
  130.  
  131. MUIApplicationTitle       "AmigaNPI 1.4"
  132. MUIApplicationVersion     "$VER: AmigaNPI 1.4 (28/Dec/97)"
  133. MUIApplicationCopyright   "David Fong"
  134. MUIApplicationAuthor      "David Fong"
  135. MUIApplicationDescription "Newton Package Installer"
  136. MUIApplicationBase        "AmigaNPI"
  137.  
  138. MUILabel 1,"Wait time (Amiga)",#MUIO_Label_LeftAligned
  139. MUILabel 2,"Wait time (Newton)",#MUIO_Label_LeftAligned
  140.  
  141. MUIAddTags 3,#MUIA_Numeric_Default,20
  142. MUINumericButton 3,"%ld seconds",5,60
  143.  
  144. MUIAddTags 4,#MUIA_Numeric_Default,5
  145. MUINumericButton 4,"%ld seconds",5,60
  146.  
  147. MUIAddObjVGroup 5,1:MUIAddObjVGroup 5,2
  148. MUIAddObjVGroup 6,3:MUIAddObjVGroup 6,4
  149. MUICreateVGroup 5:MUICreateVGroup 6
  150. MUIAddObjHGroup 7,5:MUIAddObjHGroup 7,6
  151. MUICreateHGroup 7
  152.  
  153. MUILabel 8,"Serial device",#MUIO_Label_LeftAligned
  154.  
  155. MUIAddTags 9,#MUIA_Frame,#MUIV_Frame_String
  156. MUIString 9,"devs:serial.device",80
  157.  
  158. MUIPopButton 45,#MUII_PopFile
  159.  
  160. MUIAddTags 10,#MUIA_Popstring_String,MUIObjLoc(9)
  161. MUIAddTags 10,#ASL_InitialPattern,Null("#?.device")
  162. MUIAddTags 10,#ASL_InitialDrawer,Null("devs:")
  163. MUIAddTags 10,#ASL_InitialFile,Null("serial.device")
  164. MUIAddTags 10,#ASL_flags1,1
  165. MUIAddTags 10,#ASL_TitleText,Null("serial.device")
  166. MUIAddTags 10,#MUIA_Popstring_Button,MUIObjLoc(45)
  167. MUINewObject 10,"Popasl.mui",0
  168.  
  169. MUILabel 11,"Serial unit",#MUIO_Label_LeftAligned
  170.  
  171. MUIAddTags 12,#MUIA_Frame,#MUIV_Frame_String
  172. MUIAddTags 12,#MUIA_Weight,300
  173. MUIAddTags 12,#MUIA_String_Accept,Null("0123456789")
  174. MUIString 12,"0",10
  175.  
  176. MUILabel 15,"Buffer size",#MUIO_Label_LeftAligned
  177. MUIAddTags 16,#MUIA_Frame,#MUIV_Frame_String
  178. MUIAddTags 16,#MUIA_Weight,300
  179. MUIAddTags 16,#MUIA_String_Accept,Null("0123456789")
  180. MUIString 16,"",10
  181.  
  182. MUILabel 13,"Speed",#MUIO_Label_LeftAligned
  183. MUIAddTags 14,#MUIA_Frame,#MUIV_Frame_String
  184. MUIAddTags 14,#MUIA_Weight,300
  185. MUIAddTags 14,#MUIA_String_Accept,Null("0123456789")
  186. MUIString 14,"",10
  187.  
  188. MUIAddTags 17,#MUIA_Group_Columns,2
  189. MUIAddTags 17,#Child,MUIObjLoc(8),#Child,MUIObjLoc(10)
  190. MUIAddTags 17,#Child,MUIObjLoc(11),#Child,MUIObjLoc(12)
  191. MUIAddTags 17,#Child,MUIObjLoc(15),#Child,MUIObjLoc(16)
  192. MUIAddTags 17,#Child,MUIObjLoc(13),#Child,MUIObjLoc(14)
  193. MUINewObject 17,"Group.mui",0
  194.  
  195. MUICycle 18,Chr$(27)+"cNo parity",Chr$(27)+"cEven parity",Chr$(27)+"COdd parity"
  196.  
  197. MUICheckMark 19,0:MUICheckMark 20,0
  198. MUICheckMark 21,0:MUICheckMark 22,1
  199. MUICheckMark 23,0:MUICheckMark 24,1
  200.  
  201. MUILabel 25,"Xon/Xoff",#MUIO_Label_LeftAligned
  202. MUILabel 26,"EOF mode",#MUIO_Label_LeftAligned
  203. MUILabel 27,"Shared mode",#MUIO_Label_LeftAligned
  204. MUILabel 28,"High speed",#MUIO_Label_LeftAligned
  205. MUILabel 29,"Queued break",#MUIO_Label_LeftAligned
  206. MUILabel 30,"RTS/CTS",#MUIO_Label_LeftAligned
  207. MUILabel 31,"Parity",#MUIO_Label_LeftAligned
  208.  
  209. MUIAddTags 36,#MUIA_Group_Columns,4
  210. MUIAddTags 36,#Child,MUIObjLoc(25),#Child,MUIObjLoc(19)
  211. MUIAddTags 36,#Child,MUIObjLoc(26),#Child,MUIObjLoc(20)
  212. MUIAddTags 36,#Child,MUIObjLoc(27),#Child,MUIObjLoc(21)
  213. MUIAddTags 36,#Child,MUIObjLoc(28),#Child,MUIObjLoc(22)
  214. MUIAddTags 36,#Child,MUIObjLoc(29),#Child,MUIObjLoc(23)
  215. MUIAddTags 36,#Child,MUIObjLoc(30),#Child,MUIObjLoc(24)
  216. MUINewObject 36,"Group.mui",0
  217.  
  218. MUIAddTags 37,#MUIA_InputMode,#MUIV_InputMode_RelVerify
  219. MUISimpleButton 37,Chr$(27)+"cSave serial prefs"
  220.  
  221. MUIAddTags 38,#MUIA_InputMode,#MUIV_InputMode_RelVerify
  222. MUISimpleButton 38,Chr$(27)+"cExit serial prefs"
  223.  
  224. MUIAddTags 39,#MUIA_Weight,200
  225. MUINewObject 39,"Area.mui",0
  226.  
  227. MUIAddObjHGroup 40,31:MUIAddObjHGroup 40,18
  228. MUIAddObjHGroup 40,39
  229. MUICreateHGroup 40
  230. MUIAddObjVGroup 41,17:MUIAddObjVGroup 41,36:MUIAddObjVGroup 41,40
  231. MUICreateVGroup 41
  232.  
  233. MUIAddObjPage 42,41:MUIAddObjPage 42,7
  234. MUICreatePage 42,"Serial device","Wait times"
  235.  
  236. MUIAddObjVGroup 43,42:MUIAddObjVGroup 43,37:MUIAddObjVGroup 43,38
  237. MUICreateVGroup 43
  238.  
  239. MUICreateWindow 44,"Preferences","PREF",43
  240.  
  241. MUIAddTags 50,#MUIA_InputMode,#MUIV_InputMode_RelVerify
  242. MUISimpleButton 50,Chr$(27)+"cPreferences"
  243.  
  244. MUIAddTags 51,#MUIA_InputMode,#MUIV_InputMode_RelVerify
  245. MUISimpleButton 51,Chr$(27)+"cInstall package"
  246.  
  247. MUIAddTags 52,#MUIA_Frame,#MUIV_Frame_String
  248. MUIString 52,"",80
  249.  
  250. MUIPopButton 57,#MUII_PopFile
  251.  
  252. MUIAddTags 53,#ASL_InitialPattern,Null("#?.pkg")
  253. MUIAddTags 53,#ASL_flags1,1
  254. MUIAddTags 53,#ASL_TitleText,Null("Select a package")
  255. MUIAddTags 53,#MUIA_Popstring_String,MUIObjLoc(52)
  256. MUIAddTags 53,#MUIA_Popstring_Button,MUIObjLoc(57)
  257. MUINewObject 53,"Popasl.mui",0
  258.  
  259. MUIAddTags 54,#MUIA_Frame,#MUIV_Frame_Group
  260. MUIAddTags 54,#MUIA_FrameTitle,Null("Package to install")
  261. MUIAddObjHGroup 54,53
  262. MUICreateHGroup 54
  263.  
  264. MUIAddObjVGroup 55,54:MUIAddObjVGroup 55,50:MUIAddObjVGroup 55,51
  265. MUICreateVGroup 55
  266.  
  267. MUIAddTags 56,#MUIA_Window_Width,300
  268. MUICreateWindow 56,"Amiga Newton Package Installer","MAIN",55
  269.  
  270. MUILabel 100,"Status:",#MUIO_Label_LeftAligned
  271.  
  272. MUIAddTags 101,#MUIA_Frame,#MUIV_Frame_Text
  273. MUIAddTags 101,#MUIA_Weight,400
  274. MUIAddTags 101,#MUIA_Text_Contents,Null("")
  275. MUINewObject 101,"Text.mui",0
  276.  
  277. MUIAddObjHGroup 102,100:MUIAddObjHGroup 102,101
  278. MUICreateHGroup 102
  279.  
  280. MUILabel 103,"Newton ID",#MUIO_Label_LeftAligned
  281. MUILabel 104,"Manufacturer ID",#MUIO_Label_LeftAligned
  282. MUILabel 105,"Machine type",#MUIO_Label_LeftAligned
  283. MUILabel 106,"ROM version",#MUIO_Label_LeftAligned
  284. MUILabel 107,"ROM stage",#MUIO_Label_LeftAligned
  285. MUILabel 108,"RAM size",#MUIO_Label_LeftAligned
  286. MUILabel 109,"Screen height",#MUIO_Label_LeftAligned
  287. MUILabel 110,"Screen width",#MUIO_Label_LeftAligned
  288. MUILabel 111,"Update version",#MUIO_Label_LeftAligned
  289. MUILabel 112,"Object version",#MUIO_Label_LeftAligned
  290. MUILabel 113,"Int store sig",#MUIO_Label_LeftAligned
  291. MUILabel 114,"Vert resolution",#MUIO_Label_LeftAligned
  292. MUILabel 115,"Horz resolution",#MUIO_Label_LeftAligned
  293. MUILabel 116,"Screen depth",#MUIO_Label_LeftAligned
  294. MUILabel 117,"Newton owner name",#MUIO_Label_LeftAligned
  295. For i=118 To 131
  296.  MUIAddTags i,#MUIA_Text_Contents,Null(String$(" ",10))
  297.  MUIAddTags i,#MUIA_FixWidthTxt,Null("0xFFFFFFFF")
  298.  MUINewObject i,"Text.mui",0
  299. Next i
  300. MUIAddTags 132,#MUIA_Frame,#MUIV_Frame_Text
  301. MUIAddTags 132,#MUIA_Text_Contents,Null("")
  302. MUINewObject 132,"Text.mui",0
  303.  
  304. MUIAddObjVGroup 133,103:MUIAddObjVGroup 133,104
  305. MUIAddObjVGroup 133,105:MUIAddObjVGroup 133,106
  306. MUIAddObjVGroup 133,107:MUIAddObjVGroup 133,108
  307. MUIAddObjVGroup 133,113
  308. MUICreateVGroup 133
  309.  
  310. MUIAddTags 134,#MUIA_Frame,#MUIV_Frame_Text
  311. MUIAddObjVGroup 134,118:MUIAddObjVGroup 134,119
  312. MUIAddObjVGroup 134,120:MUIAddObjVGroup 134,121
  313. MUIAddObjVGroup 134,122:MUIAddObjVGroup 134,123
  314. MUIAddObjVGroup 134,128
  315. MUICreateVGroup 134
  316.  
  317. MUIAddObjVGroup 135,109:MUIAddObjVGroup 135,110
  318. MUIAddObjVGroup 135,111:MUIAddObjVGroup 135,112
  319. MUIAddObjVGroup 135,114:MUIAddObjVGroup 135,115
  320. MUIAddObjVGroup 135,116
  321. MUICreateVGroup 135
  322.  
  323. MUIAddTags 136,#MUIA_Frame,#MUIV_Frame_Text
  324. MUIAddObjVGroup 136,124:MUIAddObjVGroup 136,125
  325. MUIAddObjVGroup 136,126:MUIAddObjVGroup 136,127
  326. MUIAddObjVGroup 136,129:MUIAddObjVGroup 136,130
  327. MUIAddObjVGroup 136,131
  328. MUICreateVGroup 136
  329.  
  330. MUIAddObjHGroup 137,133:MUIAddObjHGroup 137,134
  331. MUIAddObjHGroup 137,135:MUIAddObjHGroup 137,136
  332. MUICreateHGroup 137
  333.  
  334. MUIAddObjVGroup 138,137
  335. MUIAddObjVGroup 138,117
  336. MUIAddObjVGroup 138,132
  337. MUICreateVGroup 138
  338.  
  339. MUIAddTags 139,#MUIA_Gauge_Horiz,1
  340. MUIAddTags 139,#MUIA_Frame,#MUIV_Frame_Gauge
  341. MUIAddTags 139,#MUIA_Gauge_InfoText,Null("0 of 0 bytes")
  342. MUINewObject 139,"Gauge.mui",0
  343.  
  344. MUIAddTags 140,#MUIA_InputMode,#MUIV_InputMode_RelVerify
  345. MUISimpleButton 140,Chr$(27)+"cAbort"
  346.  
  347. MUIAddObjVGroup 141,102:MUIAddObjVGroup 141,139
  348. MUIAddObjVGroup 141,138:MUIAddObjVGroup 141,140
  349. MUICreateVGroup 141
  350.  
  351. MUIAddTags 142,#MUIA_Window_Width,250
  352. MUICreateWindow 142,"Uploading package","UPLP",141
  353.  
  354. MUIAddSubWindow 44
  355. MUIAddSubWindow 56
  356. MUIAddSubWindow 142
  357.  
  358. CEND
  359.  
  360. ;note that #AbortTransfer needs to be defined for the purposes
  361. ;of procedure `GetByte', even if cli_only is set to 1
  362.  
  363. #OpenSerialPrefs=512
  364. #LoadNewPackage=513
  365. #AbortTransfer=514
  366. #CloseSerialPrefs=515
  367. #SaveSerialPrefs=516
  368.  
  369. CNIF #cli_only=0
  370.  
  371. If MUICreateApplication
  372.  
  373.  MUIApplicationObj 150
  374.  
  375.  lf$=Chr$(10)
  376.  dummy$="AmigaNPI 1.4"+lf$+lf$+"Converted and modifed for the Amiga by David Fong (1997)"+lf$
  377.  dummy$=dummy$+"Written by Filip R. Zawadiak (1997)"+lf$+lf$
  378.  dummy$=dummy$+"This program is free software; you can redistribute it"+lf$
  379.  dummy$=dummy$+"and/or modify it according to the terms of the GNU General"+lf$
  380.  dummy$=dummy$+"Public Licence as published by the Free Software Foundation"+lf$+lf$
  381.  dummy$=dummy$+"This program is distributed in the hope that it will be useful"+lf$
  382.  dummy$=dummy$+"but WITHOUT ANY WARRANTY; without even the implied"+lf$
  383.  dummy$=dummy$+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."+lf$
  384.  dummy$=dummy$+"See the GNU General Public Licence for more details."
  385.  dummy.l=Request("AmigaNPI",dummy$,"OK")
  386.  
  387.  MUINotify 56,#MUIA_Window_CloseRequest,1,150,#MUIM_Application_ReturnID,#MUIV_Application_ReturnID_Quit
  388.  MUINotify 50,#MUIA_Pressed,0,150,#MUIM_Application_ReturnID,#OpenSerialPrefs
  389.  MUINotify 51,#MUIA_Pressed,0,150,#MUIM_Application_ReturnID,#LoadNewPackage
  390.  MUINotify 140,#MUIA_Pressed,0,150,#MUIM_Application_ReturnID,#AbortTransfer
  391.  MUINotify 142,#MUIA_Window_CloseRequest,1,150,#MUIM_Application_ReturnID,#AbortTransfer
  392.  MUINotify 44,#MUIA_Window_CloseRequest,1,150,#MUIM_Application_ReturnID,#CloseSerialPrefs
  393.  MUINotify 38,#MUIA_Pressed,0,150,#MUIM_Application_ReturnID,#CloseSerialPrefs
  394.  MUINotify 37,#MUIA_Pressed,0,150,#MUIM_Application_ReturnID,#SaveSerialPrefs
  395.  
  396.  MUIOpenWindow 56
  397.  MUICloseWindow 44
  398.  MUICloseWindow 142
  399.  
  400.  ; now set various gadgets according to prefs
  401.  
  402.  MUISet 9,#MUIA_String_Contents,&device$
  403.  MUISet 12,#MUIA_String_Contents,Null(Str$(device_unit))
  404.  MUISet 14,#MUIA_String_Contents,Null(Str$(device_speed))
  405.  MUISet 16,#MUIA_String_Contents,Null(Str$(device_buffer))
  406.  If (device_flags&128)
  407.   MUISet 19,#MUIA_Selected,False ;note that if bit 7 is set, then xon/xoff is NOT selected
  408.  Else
  409.   MUISet 19,#MUIA_Selected,1
  410.  EndIf
  411.  If (device_flags&64)
  412.   MUISet 20,#MUIA_Selected,1
  413.  Else
  414.   MUISet 20,#MUIA_Selected,False
  415.  EndIf
  416.  If (device_flags&32)
  417.   MUISet 21,#MUIA_Selected,1
  418.  Else
  419.   MUISet 21,#MUIA_Selected,False
  420.  EndIf
  421.  If (device_flags&16)
  422.   MUISet 22,#MUIA_Selected,1
  423.  Else
  424.   MUISet 22,#MUIA_Selected,False
  425.  EndIf
  426.  If (device_flags&8)
  427.   MUISet 23,#MUIA_Selected,1
  428.  Else
  429.   MUISet 23,#MUIA_Selected,False
  430.  EndIf
  431.  If (device_flags&4)
  432.   MUISet 24,#MUIA_Selected,1
  433.  Else
  434.   MUISet 24,#MUIA_Selected,False
  435.  EndIf
  436.  Select (device_flags&3)
  437.   Case 0
  438.    MUISet 18,#MUIA_Cycle_Active,0
  439.   Case 1
  440.    MUISet 18,#MUIA_Cycle_Active,1
  441.   Case 3
  442.    MUISet 18,#MUIA_Cycle_Active,2
  443.   Default
  444.    ;in the case of `2', there must in fact be an error
  445.  End Select
  446.  MUISet 3,#MUIA_Numeric_Value,desk_wait
  447.  MUISet 4,#MUIA_Numeric_Value,newt_wait
  448. Else
  449.  dummy.l=Request("Error window","Unable to open MUI interface","OK")
  450.  End
  451. EndIf
  452.  
  453. Function GetFlags{}
  454.  
  455.  m.l=0:flags.l=0
  456.  m=MUIGet(19,#MUIA_Selected)
  457.  flags+(1-m)*128      ;note that this bit is set if xon/xoff is NOT wanted
  458.  m=MUIGet(20,#MUIA_Selected)
  459.  flags+m*64
  460.  m=MUIGet(21,#MUIA_Selected)
  461.  flags+m*32
  462.  m=MUIGet(22,#MUIA_Selected)
  463.  flags+m*16
  464.  m=MUIGet(23,#MUIA_Selected)
  465.  flags+m*8
  466.  m=MUIGet(24,#MUIA_Selected)
  467.  flags+m*4
  468.  m=MUIGet(18,#MUIA_Cycle_Active)
  469.  Select m
  470.   Case 0
  471.    ; don't set any parity bits
  472.   Case 1
  473.    flags+1
  474.   Case 2
  475.    flags+3
  476.   Default
  477.    ; must be an error, actually
  478.  End Select
  479.  
  480.  Function Return flags
  481. End Function
  482.  
  483. Function get_gui_args{}
  484.  SHARED package$,device$,device_unit,device_buffer,device_speed,device_flags,desk_wait,newt_wait,pref_name$
  485.  DEFTYPE.l *m,mm
  486.  
  487.  running=True
  488.  signal.l=0
  489.  While(running)                                          ;Main loop
  490.   a.l=MUIWaitEvent
  491.   Select a                                               ;Is there a signal ???
  492.   Case #MUIV_Application_ReturnID_Quit                   ;Quit ?
  493.    running=False
  494.   Case #OpenSerialPrefs
  495.    MUIOpenWindow 44
  496.   Case #CloseSerialPrefs
  497.    MUICloseWindow 44
  498.   Case #LoadNewPackage
  499.    *m=MUIGet(52,#MUIA_String_Contents)
  500.    package$=Peek$(*m)
  501.    *m=MUIGet(9,#MUIA_String_Contents)
  502.    device$=Peek$(*m)
  503.    *m=MUIGet(12,#MUIA_String_Contents)
  504.    device_unit=Val(Peek$(*m))
  505.    *m=MUIGet(14,#MUIA_String_Contents)
  506.    device_speed=Val(Peek$(*m))
  507.    *m=MUIGet(16,#MUIA_String_Contents)
  508.    device_buffer=Val(Peek$(*m))
  509.    ; now get flags
  510.    device_flags=GetFlags{}
  511.    desk_wait=MUIGet(3,#MUIA_Numeric_Value)
  512.    newt_wait=MUIGet(4,#MUIA_Numeric_Value)
  513.    Function Return True                   ; upload package (return to main loop)
  514.   Case #SaveSerialPrefs
  515.    If WriteFile(0,pref_name$)
  516.     FileOutput 0
  517.     *m=MUIGet(9,#MUIA_String_Contents)
  518.     NPrint "Device":NPrint Peek$(*m)
  519.     *m=MUIGet(12,#MUIA_String_Contents)
  520.     NPrint "Device_Unit":NPrint Peek$(*m)
  521.     *m=MUIGet(16,#MUIA_String_Contents)
  522.     NPrint "Device_Buffer":NPrint Peek$(*m)
  523.     *m=MUIGet(14,#MUIA_String_Contents)
  524.     NPrint "Device_Speed":NPrint Peek$(*m)
  525.     ; now get flags
  526.     NPrint "Device_Flags":NPrint GetFlags{}
  527.     mm=MUIGet(3,#MUIA_Numeric_Value)
  528.     NPrint "Desktop_Wait":NPrint mm
  529.     mm=MUIGet(4,#MUIA_Numeric_Value)
  530.     NPrint "Newton_Wait":NPrint mm
  531.     CloseFile 0
  532.     If pref_name$="env:AmigaNPI.prefs"
  533.      dummy.l=CopyFile("env:AmigaNPI.prefs","envarc:AmigaNPI.prefs")
  534.     EndIf
  535.     DefaultOutput
  536.    Else
  537.     ; Couldn't open file for writing
  538.     If pref_name$="AmigaNPI.prefs"
  539.      dummy$="Unable to write AmigaNPI.prefs"+Chr$(10)+"to default directory"+Chr$(10)+Chr$(10)
  540.      dummy$="Try to write to env:"+Chr$(10)+"on next attempt?"
  541.      dummy.l=Request("Error window",dummy$,"Yes|No")
  542.      If dummy=1
  543.       pref_name$="env:AmigaNPI.prefs"
  544.       dummy.l=Request("Notify window","Please try saving prefs again...","OK")
  545.      EndIf
  546.     Else
  547.      dummy.l=Request("Error window","Unable to write"+Chr$(10)+"to env:AmigaNPI.prefs","OK")
  548.     EndIf
  549.    EndIf
  550.   Case 0
  551.    Delay_(1)
  552.   Default
  553.    NPrint a
  554.   End Select
  555.  Wend
  556.  
  557.  MUIRemoveApplication           ; Free the application
  558.  
  559.  Function Return False          ; return to main loop and quit
  560. End Function
  561.  
  562. CEND
  563.  
  564. Statement Set_Status{a$}
  565. CNIF #cli_only=0
  566.  DEFTYPE.l *m
  567.  *m=MUIGet(101,#MUIA_Text_Contents)
  568.  If Peek$(*m)<>a$ Then MUISet 101,#MUIA_Text_Contents,&a$
  569. CEND
  570. End Statement
  571.  
  572. Statement Set_Gauge{a.l}
  573. CNIF #cli_only=0
  574.  SHARED package_length
  575.  
  576.  p.l=a*100/package_length
  577.  b$=Str$(a)+" of "+Str$(package_length)+" bytes"
  578.  
  579.  MUISet 139,#MUIA_Gauge_Current,p
  580.  MUISet 139,#MUIA_Gauge_InfoText,&b$
  581. CEND
  582. End Statement
  583.  
  584. Statement Notify_Waiting{}
  585. CNIF #cli_only=0
  586.  SHARED gui_on
  587.  If gui_on=True
  588.   MUISet 139,#MUIA_Gauge_Current,0  ; set gauge status to 0
  589.   MUISet 139,#MUIA_Gauge_InfoText,Null("0 of 0 bytes")
  590.   dummy$="" ; various gadgets set to null
  591.   MUISet 118,#MUIA_Text_Contents,&dummy$:MUISet 119,#MUIA_Text_Contents,&dummy$
  592.   MUISet 120,#MUIA_Text_Contents,&dummy$:MUISet 121,#MUIA_Text_Contents,&dummy$
  593.   MUISet 122,#MUIA_Text_Contents,&dummy$:MUISet 123,#MUIA_Text_Contents,&dummy$
  594.   MUISet 124,#MUIA_Text_Contents,&dummy$:MUISet 125,#MUIA_Text_Contents,&dummy$
  595.   MUISet 126,#MUIA_Text_Contents,&dummy$:MUISet 127,#MUIA_Text_Contents,&dummy$
  596.   MUISet 128,#MUIA_Text_Contents,&dummy$:MUISet 129,#MUIA_Text_Contents,&dummy$
  597.   MUISet 130,#MUIA_Text_Contents,&dummy$:MUISet 131,#MUIA_Text_Contents,&dummy$
  598.   MUISet 132,#MUIA_Text_Contents,&dummy$
  599.   Set_Status{"Waiting"}
  600.   MUIOpenWindow 142
  601.  Else
  602. CEND
  603.   Print "Waiting..."
  604. CNIF #cli_only=0
  605.  EndIf
  606. CEND
  607. End Statement
  608.  
  609. Statement Notify_Connecting{}
  610. CNIF #cli_only=0
  611.  SHARED gui_on
  612.  If gui_on=True
  613.   Set_Status{"Connecting"}
  614.  Else
  615. CEND
  616.   NPrint "Connecting"
  617. CNIF #cli_only=0
  618.  EndIf
  619. CEND
  620. End Statement
  621.  
  622. Statement Notify_rtdk{}
  623. CNIF #cli_only=0
  624.  SHARED gui_on
  625.  If gui_on=True
  626.   Set_Status{"Request to dock received"}
  627.  Else
  628. CEND
  629.   Print "Request to dock received..."
  630. CNIF #cli_only=0
  631.  EndIf
  632. CEND
  633. End Statement
  634.  
  635. Statement Notify_dock{}
  636. CNIF #cli_only=0
  637.  SHARED gui_on
  638.  If gui_on=True
  639.   Set_Status{"Docking initiated"}
  640.  Else
  641. CEND
  642.   NPrint "Docking initiated"
  643. CNIF #cli_only=0
  644.  EndIf
  645. CEND
  646. End Statement
  647.  
  648. Statement Notify_name{a.l,b.l}
  649.  ; a contains the addresss of the received frame, b is the frame's length
  650. CNIF #cli_only=0
  651.  SHARED gui_on
  652. CEND
  653.  name$=""
  654.  ii=a+16+Peek.l(a+16)+4+1 ; start address, plus beginning of kdNewtonname
  655.                           ; plus the length kdNewtonname plus what is
  656.                           ; possibly the length of the string (including null byte)
  657.                           ; and then add one (since the string is in Unicode, which
  658.                           ; for English strings results in 00xx,00xx words)
  659.  Repeat
  660.   z=Peek.b(ii)
  661.   If (z>=32) AND (z<=127) Then name$=name$+Chr$(z)
  662.   ii+2
  663.  Until ((ii-a)>b) OR z=0
  664.  uid$="0x"+Hex$(Peek.l(a+20)):mnid$="0x"+Hex$(Peek.l(a+24))
  665.  mac$=Str$(Peek.l(a+28)):romv$=Str$(Peek.l(a+32))
  666.  roms$=Str$(Peek.l(a+36)):rams$=Str$(Peek.l(a+40))
  667.  scrh$=Str$(Peek.l(a+44)):scrw$=Str$(Peek.l(a+48))
  668.  sysv$=Str$(Peek.l(a+52)):objv$=Str$(Peek.l(a+56))
  669.  isig$="0x"+Hex$(Peek.l(a+60)):vres$=Str$(Peek.l(a+64))
  670.  hres$=Str$(Peek.l(a+68)):sdpt$=Str$(Peek.l(a+72))
  671. CNIF #cli_only=0
  672.  If gui_on=True
  673.   Set_Status{"Newton name received"}
  674.   MUISet 132,#MUIA_Text_Contents,&name$
  675.   MUISet 118,#MUIA_Text_Contents,&uid$
  676.   MUISet 119,#MUIA_Text_Contents,&mnid$
  677.   MUISet 120,#MUIA_Text_Contents,&mac$
  678.   MUISet 121,#MUIA_Text_Contents,&romv$
  679.   MUISet 122,#MUIA_Text_Contents,&roms$
  680.   MUISet 123,#MUIA_Text_Contents,&rams$
  681.   MUISet 124,#MUIA_Text_Contents,&scrh$
  682.   MUISet 125,#MUIA_Text_Contents,&scrw$
  683.   MUISet 126,#MUIA_Text_Contents,&sysv$
  684.   MUISet 127,#MUIA_Text_Contents,&objv$
  685.   MUISet 128,#MUIA_Text_Contents,&isig$
  686.   MUISet 129,#MUIA_Text_Contents,&vres$
  687.   MUISet 130,#MUIA_Text_Contents,&hres$
  688.   MUISet 131,#MUIA_Text_Contents,&sdpt$
  689.  Else
  690. CEND
  691.   NPrint "Newton name received...",name$
  692.   NPrint "Newton Unique ID : ",uid$
  693.   NPrint "Manufacturer  ID : ",mnid$
  694.   NPrint "Machine type     : ",mac$
  695.   NPrint "ROM version      : ",romv$
  696.   NPrint "ROM stage        : ",roms$
  697.   NPrint "RAM size         : ",rams$
  698.   NPrint "Screen height    : ",scrh$
  699.   NPrint "Screen width     : ",scrw$
  700.   NPrint "System update    : version ",sysv$
  701.   NPrint "Object system    : version ",objv$
  702.   NPrint "Int store sig    : ",isig$
  703.   NPrint "Vert resolution  : ",vres$
  704.   NPrint "Horz resolution  : ",hres$
  705.   NPrint "Screen depth     : ",sdpt$
  706. CNIF #cli_only=0
  707.  EndIf
  708. CEND
  709. End Statement
  710.  
  711. Statement Notify_timeoutset{}
  712. CNIF #cli_only=0
  713.  SHARED gui_on
  714.  If gui_on=True
  715.   Set_Status{"Timeout set"}
  716.  Else
  717. CEND
  718.   Print "Timeout set..."
  719. CNIF #cli_only=0
  720.  EndIf
  721. CEND
  722. End Statement
  723.  
  724. Statement Notify_resultreceived{}
  725. CNIF #cli_only=0
  726.  SHARED gui_on
  727.  If gui_on=True
  728.   Set_Status{"Result received"}
  729.  Else
  730. CEND
  731.   NPrint "Result received"
  732. CNIF #cli_only=0
  733.  EndIf
  734. CEND
  735. End Statement
  736.  
  737. Statement Notify_loading{a$}
  738. CNIF #cli_only=0
  739.  SHARED gui_on
  740.  If gui_on=True
  741.   ; do nothing
  742.  Else
  743. CEND
  744.   Print "Loading ",a$,", "
  745. CNIF #cli_only=0
  746.  EndIf
  747. CEND
  748. End Statement
  749.  
  750. Statement Notify_filelength{a.l}
  751. CNIF #cli_only=0
  752.  SHARED gui_on,package_length
  753.  package_length=a
  754.  If gui_on=True
  755.   ;do nothing, calculations are made later (since Gauge_max current limit is 16 bit)
  756.  Else
  757. CEND
  758.   NPrint a.l," bytes."
  759. CNIF #cli_only=0
  760.  EndIf
  761. CEND
  762. End Statement
  763.  
  764. Statement Notify_transferring{}
  765. CNIF #cli_only=0
  766.  SHARED gui_on
  767.  If gui_on=True
  768.   Set_Status{"Transferring package"}
  769.  Else
  770. CEND
  771.   NPrint "Transferring package"
  772. CNIF #cli_only=0
  773.  EndIf
  774. CEND
  775. End Statement
  776.  
  777. Statement Notify_progress{a.l}
  778. CNIF #cli_only=0
  779.  SHARED gui_on
  780.  If gui_on=True
  781.   Set_Status{"Transferring package"}   ; this is time wasteful, but status may have been set to error notification
  782.   Set_Gauge{a}
  783.  Else
  784. CEND
  785.   Print a.l,"..."
  786. CNIF #cli_only=0
  787.  EndIf
  788. CEND
  789. End Statement
  790.  
  791. Statement Notify_padding{}
  792. CNIF #cli_only=0
  793.  SHARED gui_on
  794.  If gui_on=True
  795.   Set_Status{"Padding file"}   ; a GUI user will probably never see this message as it flashes by!
  796.  Else
  797. CEND
  798.   NPrint ""
  799.   NPrint "WARNING - package file length is incorrect"
  800.   NPrint "...padding file with extra zeros."
  801. CNIF #cli_only=0
  802.  EndIf
  803. CEND
  804. End Statement
  805.  
  806. Statement Notify_finished{}
  807. CNIF #cli_only=0
  808.  SHARED gui_on
  809.  If gui_on=True
  810.   Set_Status{"Transfer complete"}
  811.  Else
  812. CEND
  813.   NPrint ""
  814.   Print "Package sent..."
  815. CNIF #cli_only=0
  816.  EndIf
  817. CEND
  818. End Statement
  819.  
  820. Statement Notify_disconnecting{}
  821. CNIF #cli_only=0
  822.  SHARED gui_on
  823.  If gui_on=True
  824.   Set_Status{"Disconnecting"}
  825.  Else
  826. CEND
  827.   Print "Sent disconnect..."
  828. CNIF #cli_only=0
  829.  EndIf
  830. CEND
  831. End Statement
  832.  
  833. Statement Notify_timeout{}
  834. CNIF #cli_only=0
  835.  SHARED gui_on
  836.  If gui_on=True
  837.   Set_Status{"ERROR - Timeout"}
  838.   dummy.l=Request("Error Window","ERROR - Timeout","OK")
  839.  Else
  840. CEND
  841.   NPrint ""
  842.   NPrint "Timeout - Newton is not responding"
  843. CNIF #cli_only=0
  844.  EndIf
  845. CEND
  846. End Statement
  847.  
  848. Statement Notify_disconnected{}
  849. CNIF #cli_only=0
  850.  SHARED gui_on
  851.  If gui_on=True
  852.   Set_Status{"Disconnected"}
  853.   MUICloseWindow 142
  854.  Else
  855. CEND
  856.   NPrint "Disconnected"
  857. CNIF #cli_only=0
  858.  EndIf
  859. CEND
  860. End Statement
  861.  
  862. Statement Notify_nofile{}
  863. CNIF #cli_only=0
  864.  SHARED gui_on
  865.  If gui_on=True
  866.   dummy.l=Request("Error Window","ERROR - Could not open file","OK")
  867.  Else
  868. CEND
  869.   NPrint "Error - could not open input file"
  870. CNIF #cli_only=0
  871.  EndIf
  872. CEND
  873. End Statement
  874.  
  875. Statement Notify_noserial{}
  876. CNIF #cli_only=0
  877.  SHARED gui_on
  878.  If gui_on=True
  879.   dummy.l=Request("Error Window","ERROR - Could not open serial device","OK")
  880.  Else
  881. CEND
  882.   NPrint "Error - could not open serial device"
  883. CNIF #cli_only=0
  884.  EndIf
  885. CEND
  886. End Statement
  887.  
  888. Statement Notify_BadCRC{a$,b$}
  889. CNIF #cli_only=0
  890.  SHARED gui_on
  891.  If gui_on=True
  892.   Set_Status{"Bad CRC"}
  893.  Else
  894. CEND
  895.   NPrint "Bad CRC - Received - ",a$,", Expected - ",b$
  896. CNIF #cli_only=0
  897.  EndIf
  898. CEND
  899. End Statement
  900.  
  901. Statement Notify_BadFrame{}
  902. CNIF #cli_only=0
  903.  SHARED gui_on
  904.  If gui_on=True
  905.   Set_Status{"Bad Frame"}
  906.  Else
  907. CEND
  908.   NPrint "Invalid Frame"
  909. CNIF #cli_only=0
  910.  EndIf
  911. CEND
  912. End Statement
  913.  
  914. Statement Notify_NewtonRejectsFrame{}
  915. CNIF #cli_only=0
  916.  SHARED gui_on
  917.  If gui_on=True
  918.   Set_Status{"Newton rejects frame"}
  919.  Else
  920. CEND
  921.   Print "...NEWTON REJECTS DATA FRAME..."
  922. CNIF #cli_only=0
  923.  EndIf
  924. CEND
  925. End Statement
  926.  
  927. Function GetByte{}
  928. CNIF #cli_only=0
  929.  SHARED gui_on
  930. CEND
  931.  SHARED device_unit,desk_wait
  932.  ; returns -1 if timeout
  933.  ; returns -2 if Abort button pushed
  934.  ; currently CTRL-C is not supported
  935.  ; waits at least 20 seconds
  936.  
  937.  signal.l=0:b.l=0:a.w=0:our_wait.l=desk_wait*50
  938.  t.l=Timer
  939.  Repeat
  940.   If a<0 Then Delay_(1)  ; wait if serial buffer was empty at last attempt to read
  941.   a=ReadSerial(device_unit)
  942. CNIF #cli_only=0
  943.   If gui_on=True Then b=MUIEvent
  944. CEND
  945.  Until (a>-1) OR ((Timer-t)>our_wait) OR (b=#AbortTransfer)
  946.  
  947.  If b=#AbortTransfer Then a=-2
  948.  
  949.  Function Return a
  950.  
  951. End Function
  952.  
  953. skip_mui:
  954.  
  955. ; (this file is included as part of a larger program)
  956.  
  957.  
  958.